package com.hzjh.base.utils.other

/**
 * 数量格式工作类
 */
object FormatUtils {

    /**
     * 保留位数
     */
    fun formatStringAsFixed(num: Double, format: Int): String {
        return String.format("%.${format}f", num)
//        val format = DecimalFormat("0.#")
//        //未保留小数的舍弃规则，RoundingMode.FLOOR表示直接舍弃。
//        format.roundingMode = RoundingMode.HALF_UP
//        return format.format(num)
    }

    //点赞数规则
    fun formatLikeNum(num: Int): String {
        return "${formatStringAsFixed((num / 1000.0), 1)}k"
    }

    //内容数目规则
    fun formatPostNum(num: Int): String {
        return if (num == null)
            "0"
        else if (num > 1000) {
            "${formatStringAsFixed((num / 1000.0), 1)}k"
        } else "$num"
    }

    //关联内容数规则
    fun formatRelatedPostNum(num: Int): String {
        if (num == null) {
            return "0"
        } else if (num < 100) {
            return "Fewer than 100";
        } else if (num < 500) {
            return "100+";
        } else if (num < 1000) {
            return "500+";
        } else if (num < 5000) {
            return "1000+";
        } else if (num < 10000) {
            return "5000+";
        } else if (num in 10000..999999) {
            return "${formatStringAsFixed((num / 1000.0), 2)}k";
        } else if (num in 1000000..999999999) {
            return "${formatStringAsFixed((num / 1000000.0), 2)}M";
        } else if (num >= 1000000000) {
            return "${formatStringAsFixed((num / 1000000000.0), 2)}B";
        }
        return "0";
    }


    /**
     * 格式化账户相关的数量数据
     *
     * 规则如下：
     * 0～999 直接显示
     * 1000～999999 显示1K～999.99K
     * 1000000～999999999 显示1M~999.99M
     * 1000000000～ 显示1B～
     * 小数点后保留1位
     */
    fun formatAccountDataNum(num: Int?): String {
        if (num == null) {
            return "0"
        } else if (num < 1000) {
            return "$num"
        } else if (num in 1000..999999) {
            return "${formatStringAsFixed((num / 1000.0), 1)}k"
        } else if (num in 1000000..999999999) {
            return "${formatStringAsFixed((num / 1000000.0), 1)}M"
        } else if (num >= 1000000000) {
            return "${formatStringAsFixed((num / 1000000000.0), 1)}B"
        }
        return "0"
    }
}